import cv2

"""
    cv2.imread()    读取图像
    cv2.imshow()    显示图像[闪现一下就结束掉了，如果想要一直看，配合下面的waitkey使用]
    cv2.waitKey()   鼠标按键等待事件
"""
"""
    cv2.imread(file_name: str
               flags: int = ...)
    flags指的是读取图像的类型，有原图（彩色图）1 ，灰度图 0 ，可以有透明效果的图 -1
    除了设置1 0 -1 int数值之外，还可以设置 cv2.IMREAD_GRAYSCALE等
一般默认不加flags读取图像
"""
img = cv2.imread('../images/lena.png')
print(img.shape)

cv2.imshow('original image', img)

# 参数delay表示延时，单位是毫秒，0表示一直等待
# 返回值表示按下的按键，是int类型，返回的是按键的ASCII码值，如果按下ESC则返回27
cv2.waitKey(0)
print(cv2.waitKey(0))

"""
    cv2.selectROI()      鼠标选择感兴趣的区域
"""

roi = cv2.selectROI('select ROI', img)
print(roi)
# 输出(75, 57, 418, 542)，表示(x,y,w,h)
# 其中x,y为选中的左上角坐标，w,h为宽高

# 利用切片将选中的区域从原片中截取出来
x, y, w, h = roi  # 这段代码使用了Python的序列解包（unpacking）功能，将变量roi中的四个元素分别赋值给变量x、y、w、h。
# 等价于：x=roi[0], y=roi[1], w=roi[2], h=roi[3]
img_roi = img[y:y + h, x:x + w]
cv2.imshow('ROI', img_roi)
cv2.waitKey(0)

if cv2.imwrite('../images/lena_roi.png', img_roi):
    print('保存成功')
else:
    print('保存失败')
